package JDBC;
/*
  利用JDBC查询数据库；验证用户输入信息是否存在，存在则登录成功，反之失败
     总结：SQL 攻击发生的现象是：用户输入了一些SQL中的特殊字符，#表示注释
         Statement工具：无法避免SQL注入问题，而且SQL复杂需要自己拼接参数，低效
         PreparedStatement工具：避免了SQL攻击的问题，SQL简单，高效
 */
import java.sql.*;
import java.util.Scanner;

public class TestLogin1 {
    public static void main(String[] args) {
        Connection conn =null;//
        PreparedStatement ps =null;
        try {
            //1.反射驱动
            Class.forName("com.mysql.cj.jdbc.Driver");//异常一try/catch
            //2.驱动器获取连接（url地址,用户名，密码）
            String url ="jdbc:mysql://localhost:3306/cgb2105?characterEncoding=utf8";
            conn = DriverManager.getConnection(url,"root","root");//异常二抛出E

            /*3.Scanner扫描用户输入测试*/
            String user = new Scanner(System.in).nextLine();
            String pwd = new Scanner(System.in).nextLine();
            //4.采用预处理语句（预编译语句）
            String sql = "select * from user where name=?  and password=?";// ?叫占位符
            ps = conn.prepareStatement(sql);//PreparedStatement传参,效率远高于createStatement
            //5.需要给sql里面的？设置值
            ps.setString(1,user);//用户的参数进行接收，1代表第一个问号
            ps.setString(2,pwd);
            //6.执行executeQuery查询SQL语句,返回结果集
            ResultSet rs = ps.executeQuery();/*执行语句不用SQL参数*/
            //7.判断结果集的下一个值，不再是while循环遍历.
            if(rs.next()){
                System.out.println("登录成功！！！");
            }else {
                System.out.println("登录失败！！！");
            }


        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //8.释放资源
            if(ps!=null) { //防止空指针异常
                try {
                    ps.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn!=null) { //防止空指针异常
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }


        }
    }
}
